package com.jessechanrui.template.thread;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池使用案例
 *
 * 标准线程池
 * public ThreadPoolExecutor(
 * int corePoolSize, // 核心线程数， 即使线程空闲（Idle） ， 也不会回收； 新线程创建时，工作线程数少于corePoolSize时， 即使其他工作线程处于空闲状态， 也会创建一个新线程来处理该请求， 直到线程数达到corePoolSize。
 * int maximumPoolSize, // 线程数的上限；当前工作线程数多于corePoolSize数量， 但小于maximumPoolSize数量， 那么仅当任务排队队列已满时才会创建新线程。
 * long keepAliveTime, TimeUnit unit, // 线程最大空闲（Idle） 时长；用于设置池内线程最大Idle（空闲） 时长或者说保活时长， 如果超过这个时间， 默认情况下Idle、 非Core线程会被回收。仅适用于存在超过corePoolSize线程的情况。 但是如果调用了allowCoreThreadTimeOut(boolean)方法， 并且传入了参数true， 则keepAliveTime参数所设置的Idle超时策略也将被应用于核心线程。
 * BlockingQueue<Runnable> workQueue, // 任务的排队队列， 阻塞队列，用于暂时接收到的异步任务， 如果线程池的核心线程都在忙， 那么所接收到的目标任务缓存在阻塞队列中。
 * ThreadFactory threadFactory, // 新线程的产生方式
 * RejectedExecutionHandler handler) // 拒绝策略
 *
 * @author chenrui
 * @date 2024/12/17
 */
public class ThreadPoolExecutorCase {
    public static void main(String[] args) {
        new ThreadPoolExecutor(2, 4, 60,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(2)){

        };
    }
}
